#!/bin/bash
# This script load/unload opennsl kernel modules

### BEGIN INIT INFO
# Provides:          load-opennsl-modules
# Required-Start:
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start:     S
# Default-Stop:      0 6
# Short-Description: Load OpenNSL kernel modules
### END INIT INFO

function create_devices()
{
    rm -f /dev/linux-knet-cb
    rm -f /dev/linux-bcm-knet
    rm -f /dev/linux-bcm-bde
    rm -f /dev/linux-kernel-bde
    rm -f /dev/linux_ngbde

    mknod /dev/linux_ngbde      c 120 0
    mknod /dev/linux-knet-cb    c 121 0
    mknod /dev/linux-bcm-knet   c 122 0
    mknod /dev/linux-bcm-bde    c 126 0
    mknod /dev/linux-kernel-bde c 127 0
}

# linux-kernel-bde debug=4    ==> Verbose level debug
#              dma_debug=1    ==> Enable DMA debug
# linux-bcm-knet debug=0x5020 ==> Enable KNET Warning(0x1000),
#                                 Events(0x20) and Instance(0x4000)
#                                 level logs
function load_kernel_modules()
{
    . /host/machine.conf

    if [ -n "$aboot_platform" ]; then
        platform=$aboot_platform
    elif [ -n "$onie_platform" ]; then
        platform=$onie_platform
    else
        platform="unknown"
    fi

    # Set the default configuration for dmasize and usemsi parameters
    dmasize=32M
    usemsi=0

    # Source the platform env file
    env_file="/usr/share/sonic/device/$platform/platform_env.conf"
    source $env_file

    modprobe linux-kernel-bde dmasize=$dmasize maxpayload=128 debug=4 dma_debug=1 usemsi=$usemsi
    modprobe linux-user-bde

    # Using insmod with absolute path for psample to make sure bcm psample is loaded.
    # There is a different psample.ko module getting created at net/psample/psample.ko 
    insmod /lib/modules/$(uname -r)/extra/psample.ko

    modprobe linux-bcm-knet use_rx_skb=1 rx_buffer_size=9238 debug=0x5020 default_mtu=9100
    modprobe linux-knet-cb
    modprobe linux_ngbde
}

function remove_kernel_modules()
{
    rmmod psample.ko
    rmmod linux-knet-cb
    rmmod linux-bcm-knet
    rmmod linux-user-bde
    rmmod linux-kernel-bde
    rmmod linux_ngbde
}

case "$1" in
start)
    echo -n "Load OpenNSL kernel modules... "

    create_devices
    load_kernel_modules

    echo "done."
    ;;

stop)
    echo -n "Unload OpenNSL kernel modules... "

    remove_kernel_modules

    echo "done."
    ;;

force-reload|restart)
    echo "Not supported"
    ;;

*)
    echo "Usage: /etc/init.d/opennsl-modules.init {start|stop}"
    exit 1
    ;;
esac

exit 0

